object VarAndFunction {
  def main(args: Array[String]): Unit = {
    var i = 100
    i = i+500
//    printf(i+"")

    val x = 200
//    x = 500

//    var res1 = square1(10)
//    println(res1)

    //call printByValue
//    printByValue(100)
    //x可以是一个 function

    //传入function调用printByValue
//    printByValue(square1(10))


    //传入function调用printByName
    printByName(square(10))
  }

  //方法的定义
  def square(x:Int): Int = {
    println(x)
    x * x   //返回值
    //返回值不需要用return，最后一行代码的结果就代表该方法返回值
  }

  //不返回，表示没有返回，就是什么都没有.相当于void
  def square1(x:Int): Unit = {
    println(x)
    x * x   //返回值
    //返回值不需要用return，最后一行代码的结果就代表该方法返回值
  }

  //x 可以接受任意类型的值
  def printByValue(x:Any):Unit = {
    println(x);println(x) // 10 100 100 接受函数的运行的结果
  }

  // x：指向传递的函数，x代表的引用
  def printByName(x: => Any):Unit = {
    println(x);println(x)   //x = square(10) 函数本身，x 指向这个函数的地址值
  }
}
